#include <iostream>
#include <string>

#include "compiler.hpp"
#include "runner.hpp"
#include "compile_run.hpp"
#include "../comm/httplib.h"

using namespace ns_compiler;
using namespace ns_runner;
using namespace ns_compile_and_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cout << "Usage: " << "\n\t" << proc << " port" << std::endl; 
}
// ./compile_server port
int main(int argc, char *argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }
    Server svr;
    // 添加POST请求处理函数，处理上传的代码
    svr.Post("/compile_and_run", [](const Request &req, Response &resp){
        // 用户请求的正文就是我们想要的json串
        std::string in_json = req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application/json; charset = utf-8");
        }
    });
    
    svr.listen("0.0.0.0", atoi(argv[1])); //启动http服务

    return 0;
}


// int main()
// {
//     Server svr;

//     // svr.Get("/hello",[](const Request &req, Response &resp){
//     //     // 用来测试
//     //     resp.set_content("hello httplib, 你好", "text/plain;charset = utf-8");
//     // });

//     svr.listen("0.0.0.0", 8080);

//     // in_json: {"code": "#include...", "input": "","cpu_limit":1, "mem_limit":10240}
//     // out_json: {"status":"0", "reason":"","stdout":"","stderr":"",}
//     // 通过http 让client 给我们 上传一个json string
//     // 下面的工作，充当客户端请求的json串
//     // std::string in_json;
//     // Json::Value in_value;
//     // in_value["code"] = R"(#include<iostream>
//     // int main(){
//     //     std::cout << "你可以看见我了" << std::endl;
//     //     return 0;
//     // })";
//     // in_value["input"] = "";
//     // in_value["cpu_limit"] = 1;
//     // in_value["mem_limit"] = 10240 * 3;

//     // Json::FastWriter writer;
//     // in_json = writer.write(in_value);

//     // std::cout << in_json << std::endl;

//     // // 这个是将来给客户端返回的json串
//     // std::string out_json;
//     // CompileAndRun::Start(in_json, &out_json);

//     // std::cout << out_json << std::endl;
//     return 0;
// }